package vista;

import gpschallenge.componentes.utililidades.XML;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;

import controlador.Coordinador;

public class VentanaUsuarioRegistrado extends JFrame implements ActionListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Coordinador miCoordinador;
	private JLabel labelTitulo;
	private JButton botonAceptar;
	private JButton botonVolver;
	private ArrayList<JRadioButton> listaDeBotones = new ArrayList<JRadioButton>();

	@SuppressWarnings("unchecked")
	public VentanaUsuarioRegistrado(Coordinador unCoordinador)
			throws IOException, ClassNotFoundException {
		miCoordinador = unCoordinador;

		labelTitulo = new JLabel();
		labelTitulo.setText("ELIJA SU USUARIO");
		labelTitulo.setBounds(160, 20, 380, 40);
		labelTitulo.setFont(new java.awt.Font("Verdana", 1, 15));
		add(labelTitulo);

		File archivoUsers = new File("ListaUsuarios.xml");
		ArrayList<String> listaUsers = null;
		if (archivoUsers.exists()) {
			listaUsers = (ArrayList<String>) XML
					.obtenerObjeto("ListaUsuarios.xml");

			java.util.Iterator<String> it = listaUsers.iterator();
			String nombreJugador;
			int separacion = 40;
			while (it.hasNext()) {
				nombreJugador = it.next();
				JRadioButton unBoton = new JRadioButton(nombreJugador);
				unBoton.setBounds(200, separacion + 20, 120, 25);
				add(unBoton);

				listaDeBotones.add(unBoton);

				separacion += 20;
			}
		} else {
			JLabel labelNada = new JLabel();
			labelNada.setText("No Hay Usuarios Registrados");
			labelNada.setBounds(160, 150, 180, 25);
			add(labelNada);
		}

		botonAceptar = new JButton();
		botonAceptar.setBounds(180, 220, 120, 40);
		botonAceptar.setText("Aceptar");

		if (listaUsers == null || listaUsers.isEmpty()) {
			botonAceptar.setEnabled(false);
		}

		botonAceptar.addActionListener(this);
		add(botonAceptar);

		botonVolver = new JButton();
		botonVolver.setText("Volver");
		botonVolver.setBounds(360, 280, 100, 30);

		botonVolver.addActionListener(this);
		add(botonVolver);

		setSize(480, 350);
		setTitle("GPS-Challenge (Usuario Registrado)");
		setLocationRelativeTo(null);
		setResizable(false);
		setLayout(null);
	}

	public void setCoordinador(Coordinador unCoordinador) {
		miCoordinador = unCoordinador;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (!listaDeBotones.isEmpty() && e.getSource() == botonAceptar) {
			if (hayUnSoloBotonPresionado(listaDeBotones)) {
				this.dispose();
				JRadioButton botonPresionado = devolverBotonPresionado();
				String nombreJugador = botonPresionado.getText();
				miCoordinador.getMiJugador().setNombre(nombreJugador);
				VentanaContrasenia unVentanaContrasenia = new VentanaContrasenia(miCoordinador);
				unVentanaContrasenia.setVisible(true);
			} else {
				limpiar();
			}
		}

		if (e.getSource() == botonVolver) {
			this.dispose();
			miCoordinador.mostrarVentanaPrincipal();
		}
	}

	private void limpiar() {
		java.util.Iterator<JRadioButton> it = listaDeBotones.iterator();
		JRadioButton unBoton;
		while (it.hasNext()) {
			unBoton = it.next();
			unBoton.setSelected(false);
		}
	}

	private JRadioButton devolverBotonPresionado() {
		java.util.Iterator<JRadioButton> it = listaDeBotones.iterator();
		JRadioButton unBoton;
		while (it.hasNext()) {
			unBoton = it.next();
			if (unBoton.isSelected() == true) {
				return unBoton;
			}
		}
		return null;
	}

	private boolean hayUnSoloBotonPresionado(ArrayList<JRadioButton> unaLista) {
		java.util.Iterator<JRadioButton> it = unaLista.iterator();
		int contador = 0;
		JRadioButton unBoton;
		while (it.hasNext() && contador < 2) {
			unBoton = it.next();
			if (unBoton.isSelected() == true) {
				contador++;
			}
		}

		if (contador == 1) {
			return true;
		} else return false;
	}

}